#include <deque>
using namespace std;

template<class T, class Container=deque<T>>
class Queue{
  Container _con;
public:
  template<class InputIterator>
  Queue(InputIterator first, InputIterator last)
  {
    while(first != last)
    {
      _con.push_back(*first);
      ++first;
    }
  }

  void push(const T& val)
  {
    _con.push_back(val);
  }

  void pop()
  {
    _con.pop_front();
  }

  T& front(){
    _con.front();
  }

  T& back(){
    _con.back();
  }

  const T& front() const{
    _con.front();
  }

  const T& back() const{
    _con.back();
  }

  bool empty(){
    return _con.empty();
  }

  size_t size(){
    return _con.size();
  }
};
